
/*
在 Rust 中宏分为两大类：
声明式宏( declarative macros ) macro_rules! 
和三种过程宏( procedural macros ):
1. #[derive]，在之前多次见到的派生宏，可以为目标结构体或枚举派生指定的代码，例如 Debug 特征
2. 类属性宏(Attribute-like macro)，用于为目标添加自定义的属性
3. 类函数宏(Function-like macro)，看上去就像是函数调用
//
过程宏中的 derive 宏输出的代码并不会替换之前的代码，这一点与声明宏有很大的不同
//
当创建过程宏时，它的定义必须要放入一个[独立的包]中，且包的类型也是特殊的，这么做的原因相当复杂，大家只要知道这种限制在未来可能会有所改变即可。
事实上，根据这个说法，过程宏放入独立包的原因在于它必须先被编译后才能使用，
如果过程宏和使用它的代码在一个包，就必须先单独对过程宏的代码进行编译，然后再对我们的代码进行编译，但悲剧的是 Rust 的编译单元是包，因此你无法做到这一点。

*/



fn main() {
    println!("Hello, world!");
}

